// 引入node框架
const express = require("express");
// 引入跨域资源共享
const cors = require('cors')
// 引入数据库
const db = require("./config/db");
//引入自定义路由中间件函数
const router = require("./router");
// 环境参数
let env_url = process.env.NODE_ENV;
// 创建服务对象
const app = express();
// 引入body-parser
const bodyParser = require('body-parser');

//----- 配置跨域 -----
app.use(cors())

// 在 Express 4.x 及以下版本中 body-parser 中间件来解析请求体。可以通过设置 limit 选项来调整请求体的最大大小
// 解析 application/json 类型的请求体，设置最大限制为 50mb
app.use(bodyParser.json({ limit: '50mb' }));
// 解析 application/x-www-form-urlencoded 类型的请求体，设置最大限制为 50mb
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));

// // 使用中间件获取普通键值对参数
//app.use(express.urlencoded())
// 使用中间件获取JSON参数
// app.use(express.json())

// 判断是否开发环境
if (process.env.NODE_ENV === 'development') {
  env_url = "/dev-api"
} else {
  env_url = '/prod-api'
}

//使用路由中间件
app.use("/dev-api", router);

// 监听请求中断
app.use(function (err, req, res, next) {
  if (err.code === 'ECONNABORTED') {
    console.error('请求被客户端中断:', {
      message: err.message,
      url: req.originalUrl,
      method: req.method,
      headers: req.headers,
      clientIp: req.ip,
      timeElapsed: Date.now() - req._startTime // 计算请求处理时间
    });
    console.log(err.message)
    console.log(err.type)
  } else {
    next(err)
  }
})

// 监听null请求
app.use("*", function (req, res) {
  // 返回404
  res.send("404");
})

//开始服务对象的监听端口返回服务对象实例
const server = app.listen(9984, function () {
  //通过服务对象实例调用address()获得当前服务程序的IP地址和端口号
  //const { address, port } = server.address();
  console.log("服务已启动请访问：http://localhost:9984");
  console.log(`worker pid=${process.pid}`);
});

// 延长超时时间
server.timeout = 120000; // 2分钟
